iOSで使える柔軟なログフレームワーク〜CocoaLumberjack
iOSアプリをデバッグするときにNSLogを使ってログを確認するのは皆さんも良くやっていると思います。実際に業務で構築するときは、案件に合わせてマクロを定義してデバッグ時とリリース時の出力を制御したりする方も多いのではないでしょうか。毎回この設定を行うのは非常に面倒です。そこで登場するのがCocoaLumberjackです!
CocoaLumberjackとは?
CocoaLumberjackはiOSで利用できるオープンソース(BSDライセンス)のログライブラリです。出力先にコンソール以外を選択することができたり、予め用意されたログ出力レベルに応じてしこんだログの出力を制御できたりと非常に柔軟に使用できます。また、NSLogよりも高速に動作するらしいです。では早速使ってみましょう!
CocoaLumberJackの導入
CocoaLumberJackの導入は非常に簡単です。方法は以下の2つです。
CocoaPodsからインストール
CocoaPodsからインストールする場合は、Podfileに以下を記述します。
pod 'CocoaLumberjack'
ソースをダウンロードして直接追加する
ソースを直接プロジェクトに追加する場合は、Github(robbiehanson/CocoaLumberjack)にソースコードが公開されているのでそこからダウンロードします。あとはCocoaLumberjack/Lumberjack以下のソースをプロジェクトに追加するだけです。
CocoaLumberjackを使う準備
CocoaLumberjackを使うには、AppDelegateの- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsメソッドに以下のコードを記述します。
#import "AppDelegate.h" #import "DDLog.h" #import "DDTTYLogger.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Xcodeのコンソールにログを出力する場合は以下を記述する [DDLog addLogger:[DDTTYLogger sharedInstance]]; return YES; } ・・・ @end
出力先の設定方法
CocoaLumberjackでは以下の出力先が設定可能です。
- DDLog
- NSLogに変わる標準的なメソッド。
- DDTTYLogger
- 可能であればXcodeのコンソールにログを出力する。
- DDASLLogger
- アップルのシステムロガーに送信する(送信した内容はConsole.appで確認可能)。
- DDFileLogger
- ファイルにログを出力する。
出力先は複数設定することが可能で、その場合は以下のように記述します。
#import "AppDelegate.h" #import "DDLog.h" #import "DDTTYLogger.h" #import "DDASLLogger.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Xcodeのコンソールにログを出力する場合は以下を記述する [DDLog addLogger:[DDTTYLogger sharedInstance]]; // アップルのシステムロガーに送信する [DDLog addLogger:[DDASLLogger sharedInstance]]; return YES; } ・・・ @end
ログの出力レベルを設定する
次にプロジェクトで使用するログの出力レベルを設定します。ログの出力レベルを設定するには以下の記述をXxx-Prefix.pchなどに記述する必要があります。
// 全レベルのログを表示する static const int ddLogLevel = LOG_LEVEL_VERBOSE;
設定できるログの出力レベルは以下の6つです。
- LOG_LEVEL_ERROR
- DDLogError関数を使用したログ出力を表示する。
- LOG_LEVEL_WARN
- DDLogError関数とDDLogWarn関数を使用したログ出力を表示する。
- LOG_LEVEL_INFO
- DDLogError関数とDDLogWarn関数とDDLogInfo関数を使用したログ出力を表示する。
- LOG_LEVEL_DEBUG
- DDLogError関数とDDLogWarn関数とDDLogInfo関数とDDLogDebug関数を使用したログ出力を表示する。
- LOG_LEVEL_VERBOSE
- すべて(DDLogError関数、DDLogWarn関数、DDLogInfo関数、DDLogVerbose関数)のログ出力を表示する。
- LOG_LEVEL_OFF
- ログを表示しない。
デバッグ時とリリース時で出力するログを変える場合は、以下のようにXxx-Prefix.pchに以下のように記述できます。
#ifdef DEBUG // デバッグ時は全レベルのログを表示する static const int ddLogLevel = LOG_LEVEL_VERBOSE; #else // リリース時はログを表示しない static const int ddLogLevel = LOG_LEVEL_OFF; #endif
このように、状況と出力レベルに応じてログの出力を制御できるので、気兼ねなくソース中にログを仕込むことができます。
ログを出力してみよう!
これでCocoaLumberjackを使用する準備ができました。あとはログを仕込むだけです。ログを出力するには以下の5つの関数を使用します。
- DDLogError関数
- LOG_LEVEL_OFF以外の出力レベルが設定されてた場合に出力される。
- DDLogWarn関数
- LOG_LEVEL_ERROR、LOG_LEVEL_OFF以外の出力レベルが設定されてた場合に出力される。
- DDLogInfo関数
- LOG_LEVEL_ERROR、LOG_LEVEL_WARN、LOG_LEVEL_OFF以外の出力レベルが設定されてた場合に出力される。
- DDLogDebug関数
- LOG_LEVEL_ERROR、LOG_LEVEL_WARN、LOG_LEVEL_INFO、LOG_LEVEL_OFF以外の出力レベルが設定されてた場合に出力される。
- DDLogVerbose関数
- LOG_LEVEL_VERBOSEが設定されてた場合に出力される。
- LOG_LEVEL_OFF
- ログを表示しない。
使い方はNSLogと同様です。
// エラーが発生した場合 DDLogError(@"エラーが発生したぞ!"); // 警告が発生した場合 DDLogWarn(@"Warning!"); // おおまかな情報を表示したりなど DDLogInfo(@"APIから〇〇情報をゲット"); // デバッグ情報 DDLogDebug(@"XXXメソッドが実行されました。"); // デバッグに必要なより細かい情報など NSString *str = @"文字列です"; DDLogVerbose(@"strの内容: %@", str);
まとめ
これがあれば、NSLogの面倒な設定を回避できますね!是非使ってみてください!